package com.irdstudio.efp.rule.service.vo;

import java.io.Serializable;
import java.util.stream.Stream;

/**
 * @description:规则结果信息
 * @date:2018年12月28日 下午5:57:39
 * @author:wangyk3
 */
public class RespRuleVO implements Serializable{

	private static final long serialVersionUID = -6854331014484842593L;
	public static final String PASS = "0000";
	public static final String REFUSE = "1000";
	private String appNo;// 流水号
	private String ruleResult = "0000";// 执行结果
	private String ruleId ;// 执行规则明细

	public String getRuleId() {
		return ruleId;
	}

	public RespRuleVO() {
		
	}
	
	public RespRuleVO(String appNo, String ruleResult, String  ruleId) {
		this.appNo = appNo;
		this.ruleResult = ruleResult;
		this.ruleId = ruleId;
	}

	public RespRuleVO(String appNo) {
		this.appNo = appNo;
	}

	public String getAppNo() {
		return appNo;
	}

	public void setAppNo(String appNo) {
		this.appNo = appNo;
	}

	public String getRuleResult() {
		return ruleResult;
	}

	public void setRuleResult(String ruleResult) {
		this.ruleResult = ruleResult;
	}

	
	@Override
	public String toString() {
		return "RespRuleVO [appNo=" + appNo + ", ruleResult=" + ruleResult + ", ruleId=" + ruleId + "]";
	}

	/**
	 * @description:将两个结果合并
	 * @param other
	 * @return
	 * @date:2018年12月26日 下午5:32:29
	 * @author:wangyk3
	 */
	public RespRuleVO merge(RespRuleVO other) {
		// 计算出这两个结果通过的个数，然后根据个数进行判断
		long numOf0000 = Stream.of(this, other).filter(i -> i.ruleResult.equals("0000")).count();
		
		if (numOf0000 == 0) {
			// 如果全部不通过，将两个结果的错误码相加
			this.ruleResult = this.ruleResult + other.ruleResult;
		} else if (numOf0000 == 1) {
			// 只有一个未通过，那么将结果替换为那个带有错误码的
			this.ruleResult = other.ruleResult.equals("0000") ? 
					this.ruleResult : other.ruleResult;
		}// 如果都通过了，那么直接返回即可
		return this;
	}

}
